package com.softer.chengxin.excel.dao;

import com.softer.chengxin.excel.dao.provider.StatisticalReportDaoProvider;
import com.softer.chengxin.excel.domin.ExportExcel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;

/**
 * @author Gong Zhiyang
 * @date 2019/2/20
 */
@Mapper
@Repository
public interface StatisticalReportDao {
    /**
     * 查询企业数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @return 企业数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getCorpNum")
    Integer getCorpNum(@Param("area") String area,
                       @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询项目数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @return 项目数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getProjectNum")
    Integer getProjectNum(@Param("area") String area,
                          @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询三体系认证数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param state       三体系认证（1通过，0不通过）
     * @return 三体系认证数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getThreeSystemNum")
    Integer getThreeSystemNum(@Param("area") String area,
                              @Param("exportExcel") ExportExcel exportExcel,
                              @Param("state") String state);

    /**
     * 查询党支部数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param state       党组织建设情况 ：1，成立党支部；  0未成立党支部
     * @return 党支部数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getOrganizationNum")
    Integer getOrganizationNum(@Param("area") String area,
                               @Param("exportExcel") ExportExcel exportExcel,
                               @Param("state") String state);

    /**
     * 查询主营收入
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param type        收入类型（主营业务收入"main_business_income",公共收益"public_income",利润"profit",其他收入"other_income"）
     * @return 主营收入
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getIncome")
    BigDecimal getIncome(@Param("area") String area,
                         @Param("exportExcel") ExportExcel exportExcel,
                         @Param("type") String type);

    /**
     * 查询企业人数
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param parameter   查询参数
     * @return 企业人数
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getCorpPersonNum")
    Integer getCorpPersonNum(@Param("area") String area,
                             @Param("exportExcel") ExportExcel exportExcel,
                             @Param("parameter") String parameter);

    /**
     * 查询项目人数
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param parameter   查询参数
     * @return 项目人数
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getProjectPersonNum")
    Integer getProjectPersonNum(@Param("area") String area,
                                @Param("exportExcel") ExportExcel exportExcel,
                                @Param("parameter") String parameter);

    /**
     * 查询各个等级的数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param year        年份
     * @param level       等级
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getLevelNum")
    Integer getLevelNum(@Param("area") String area,
                        @Param("exportExcel") ExportExcel exportExcel,
                        @Param("year") String year,
                        @Param("level") String level);

    /**
     * 查询黑名单数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getBlackList")
    Integer getBlackList(@Param("area") String area,
                         @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询项目各种面积
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param type        查询类型
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getProjectArea")
    BigDecimal getProjectArea(@Param("area") String area,
                              @Param("exportExcel") ExportExcel exportExcel,
                              @Param("type") String type);

    /**
     * 查询老旧小区，智能化管理小区，保障住房数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param type        查询类型
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getHouseNum")
    Integer getHouseNum(@Param("area") String area,
                        @Param("exportExcel") ExportExcel exportExcel,
                        @Param("type") String type);

    /**
     * 业委会数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getProprietor")
    Integer getProprietor(@Param("area") String area,
                          @Param("exportExcel") ExportExcel exportExcel);

    /**
     * 查询优良,负面信息数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param type        结束时间
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getInfoNum")
    Integer getInfoNum(@Param("area") String area,
                       @Param("exportExcel") ExportExcel exportExcel,
                       @Param("type") Integer type);

    /**
     * 查询教育数量
     *
     * @param area        登陆账号的管辖范围
     * @param exportExcel 报表条件
     *                    district  地区
     *                    street    街道
     *                    beginTime 开始时间
     *                    endTime   结束时间
     * @param type        参数类型（subject_type，department）
     * @param value       具体的值
     * @return 数量
     */
    @SelectProvider(type = StatisticalReportDaoProvider.class, method = "getTrainNum")
    Integer getTrainNum(@Param("area") String area,
                        @Param("exportExcel") ExportExcel exportExcel,
                        @Param("type") String type,
                        @Param("value") String value);

    /**
     * 根据区域id获取区域名称
     *
     * @param id ID
     * @return 名称
     */
    @Select("SELECT name FROM district_street WHERE id=#{id}")
    String getName(@Param("id") Integer id);
}
